day3,4使用了隨機生成與continue 語句製作了關卡,今天就來用反向語句增加難度吧!
目錄:
1.反向迴圈實例
2.遊戲設計
反向迴圈(Reverse Loop)是指從結束條件開始,逐步向開始條件進行迭代的迴圈結構。
以下是一些使用反向迴圈的例子:
例子一:倒序遍歷數組
使用反向for迴圈來倒序遍歷數組元素:
public class ReverseLoop {
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5};
for (int i = array.length - 1; i >= 0; i--) {
System.out.println("Element at index " + i + ": " + array[i]);
}
}
}
在這個例子中,迴圈從array.length - 1(即數組的最後一個索引)開始,逐步遞減到索引0。
例子二:反向處理字符串
如果想要倒序處理字符串中的每個字符,可以使用反向迴圈:
public class ReverseLoop {
public static void main(String[] args) {
String str = "Hello, World!";
for (int i = str.length() - 1; i >= 0; i--) {
System.out.print(str.charAt(i));
}
}
}
這個迴圈從字符串的最後一個字符開始,逐個向前輸出字符,最終實現字符串的反向輸出。
例子三:反向計數
有時需要進行反向計數,這可以通過反向for迴圈來實現:
public class ReverseLoop {
public static void main(String[] args) {
for (int i = 10; i >= 1; i--) {
System.out.println("Count: " + i);
}
}
}
這個例子從10開始計數,逐步遞減到1。
反向迴圈在處理需要倒序的情況時非常有用,使用起來也很簡單,只需調整迴圈的初始條件、結束條件和遞減方式即可。
2.遊戲設計:
import java.util.Random;
public class ChallengingMaze {
private final int width;
private final int height;
private char[][] maze;
private final Random random = new Random();
private int score;
public ChallengingMaze(int width, int height) {
this.width = width;
this.height = height;
this.score = 0;
}
private void generateMaze(int level) {
maze = new char[width][height];
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
maze[x][y] = '#'; // 用#表示牆壁
}
}
// 設置空白路徑
for (int x = 1; x < width - 1; x++) {
for (int y = 1; y < height - 1; y++) {
maze[x][y] = ' ';
}
}
// 添加敵人和陷阱
int enemies = level;
int traps = level;
int treasures = level;
for (int i = width - 2; i >= 1; i--) {
for (int j = height - 2; j >= 1; j--) {
if (random.nextInt(100) < 5 && enemies > 0) {
maze[i][j] = 'E'; // E表示敵人
enemies--;
} else if (random.nextInt(100) < 5 && traps > 0) {
maze[i][j] = 'T'; // T表示陷阱
traps--;
} else if (random.nextInt(100) < 5 && treasures > 0) {
maze[i][j] = 'C'; // C表示寶藏
treasures--;
}
}
}
}
public void printMaze() {
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
System.out.print(maze[x][y] + " ");
}
System.out.println();
}
}
public void moveCharacter(int startX, int startY) {
int x = startX;
int y = startY;
while (true) {
if (maze[x][y] == 'T') {
score -= 10;
System.out.println("踩到陷阱,扣10分");
} else if (maze[x][y] == 'C') {
score += 10;
System.out.println("找到寶藏,加10分");
} else if (maze[x][y] == 'E') {
score -= 20;
System.out.println("遇到敵人,扣20分");
}
maze[x][y] = ' '; // 清除標記
// 隨機移動到下一個位置
int[] directions = {0, 1, 0, -1, 1, 0, -1, 0}; // 上、右、下、左
int dirIndex = random.nextInt(4) * 2;
x += directions[dirIndex];
y += directions[dirIndex + 1];
if (x < 0 || x >= width || y < 0 || y >= height || maze[x][y] == '#') {
break; // 碰到牆壁或邊界時停止移動
}
}
}
public int getScore() {
return score;
}
public static void main(String[] args) {
ChallengingMaze maze = new ChallengingMaze(21, 21);
// 遊戲分多個關卡,每個關卡難度逐漸增加
for (int level = 1; level <= 5; level++) {
System.out.println("關卡 " + level);
maze.generateMaze(level);
maze.printMaze();
maze.moveCharacter(10, 10);
System.out.println("關卡 " + level + " 的得分: " + maze.getScore());
System.out.println();
}
System.out.println("最終得分: " + maze.getScore());
}
}
以上遊戲跟前兩天的內容較不貫通,往後增加修改加美編,就可以這週的遊戲挑戰啦~